<?php

namespace app\common\model;

use app\BaseModel;
use app\common\model\trait\IndexConfig;

/**
 * 配置模型类
 * @property string $code 标识
 * @property string $name 名称
 * @property \stdClass $content 内容
 * @property mixed $create_time $createTime
 * @property mixed $update_time $updateTime
 */
class Config extends BaseModel
{
    use IndexConfig;

    protected $pk = 'code';
    protected $schema = [
        'code' => 'varchar',     // 标识
        'name' => 'varchar',     // 名称
        'content' => 'text',     // 内容
        'create_time' => 'datetime',     // create_time
        'update_time' => 'datetime',     // update_time
    ];
    protected $json = ['content'];

    /**
     * 用户协议配置
     */
    const CODE_USER_AGGREMENT = 'user_agreement';

    /**
     * 首页配置
     */
    const CODE_OFFICIAL_WEBSITE_HOME = 'official_website_home';

    /**
     * 溯源码配置
     */
    const CODE_TS_CODE = 'ts_code';

    // 设置json类型字段

    /**
     * 获取配置对象
     * @param string $code
     * @return self
     */
    public static function getConfigModel($code)
    {
        $config = (new self)->where('code', $code)->cache(true, 60)->find();
        if (empty($config)) {
            $configData = [
                'code' => $code,
                'create_time' => getNow(),
                'update_time' => getNow(),
            ];

            $config = self::create($configData);
        }
        return $config;
    }

    /**
     * 获取配置数据内容
     * @param $code
     * @return \stdClass
     */
    public static function getConfigContent($code)
    {
        $config = self::getConfigModel($code);
        return $config->content ?? new \stdClass;
    }

    /**
     * 获取配置数据中指定的值
     * @param $code
     * @param $content_code 如果读取的为json值才有效
     * @return mixed
     */
    public static function getConfigValue($code, $content_code = '')
    {
        $content = self::getConfigContent($code);
        return $content->$content_code;
    }
}
